var express = require( 'express' );
var path = require( 'path' );
var settings = require( "./settings" );
var session = require( 'express-session' );

var favicon = require( 'serve-favicon' );
var logger = require( 'morgan' );
var cookieParser = require( 'cookie-parser' );
var bodyParser = require( 'body-parser' );

require( './config/mongoose' )();
var MongoStore = require( "connect-mongodb" );
var routes = require( './routes/index' );
var users = require( './routes/users' );
var admin = require( './routes/admin' );
var app = express();
// view engine setup
app.set( 'views', path.join( __dirname, 'views' ) );
app.set( 'view engine', 'ejs' );
app.engine(".html", require("ejs").renderFile);
app.set("view engine", "html");
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use( logger( 'dev' ) );
app.use( bodyParser.json() );
app.use( bodyParser.urlencoded( { extended: false } ) );
app.use( cookieParser() );
app.use( express.static( path.join( __dirname, 'public' ) ) );
//app.use( session( {
//    secret           : 'blog',
//    resave           : false,
//    saveUninitialized: true,
    //cookie: { maxAge: 60 * 60 * 1000 }
    /*resave: false,
     saveUninitialized: true,
     secret: settings.cookieSecret,
     store: new MongoStore({
     db: settings.db
     })*/
//} ) );
app.use(session({
    resave           : true,
    saveUninitialized: false,
    secret: settings.cookieSecret,
    name:'blog',
    cookie: {maxAge: 60 * 60 * 1000 },
    /*store: new MongoStore({
        db: settings.db
    })*/
}));
app.use( '/', routes );
app.use( '/users', users );
app.use( '/admin', admin );
// catch 404 and forward to error handler
app.use( function( req, res, next ) {
    var err = new Error( 'Not Found' );
    err.status = 404;
    next( err );
} );

// error handlers

// development error handler
// will print stacktrace
if( app.get( 'env' ) === 'development' ) {
    app.use( function( err, req, res, next ) {
        res.status( err.status || 500 );
        res.render( 'error', {
            message: err.message,
            error  : err
        } );
    } );
}

// production error handler
// no stacktraces leaked to user
app.use( function( err, req, res, next ) {
    res.status( err.status || 500 );
    res.render( 'error', {
        message: err.message,
        error  : {}
    } );
} );


module.exports = app;
